package com.school.springboot_login.annotation;

import java.lang.annotation.*;

/*
 * 日志层自定义注解
 */
/*
@Target说明了Annotation所修饰的对象范围，Annotation可被用于 packages、types（类、接口、枚举、Annotation类型）、
 类型成员（方法、构造方法、成员变量、枚举值）、方法参数和本地变量（如循环变量、catch参数）。
在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
  *PARAMETER:用于描述参数
  *METHOD:用于描述方法
*/
@Target({ElementType.PARAMETER, ElementType.METHOD})
/*Retention用来修饰注解，是注解的注解，称为元注解
    *RetentionPolicy.SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
    *RetentionPolicy.CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期
    *RetentionPolicy.RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
    *这3个生命周期分别对应于：Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码*/
@Retention(RetentionPolicy.RUNTIME)
/*
* @Documented
* 表明这个注解应该被javadoc工具记录
*  只是起一个标识，没有实际作用
* */
@Documented
/*
* @interface自定义注解，使用它声明注解
* */
public @interface LogAnnotation {
    //模块名
    String moduleName() default "";
    //操作内容
    String option() default "";
}
